package pzc.jdbc;

import java.sql.ResultSet;

/**
 * ResultSetを便利で使えるように作成したクラス
 * 
 * @see DbOperator#executeQuery(String, java.util.Map, ResultSetWhileOp)
 * 
 */
public interface ResultSetWhileOp {

	/**
	 * ResultSetに結果がある時、結果を繰り返して取得するっていう操作はこのメソッドを実装する.
	 * 
	 * <pre>
	 * 例:
	 *   すべてのMOSの製品名を取得しようとする時
	 *   SQL: select name from T_XXX where id = '1000';
	 *   
	 *   元のやり方:
	 *   ResultSet rs = null;
	 *   List&lt;String&gt; prodNameList = null;
	 *   try {
	 *       rs = dbop.executeQuery(sql, paramMap);
	 *       if(!CommUtil.isEmpty(rs)) {
	 *           prodNameList = new ArrayList&lt;String&gt;();
	 *           while (rs.next()) {
	 *               String prodName = rs.getString(1);
	 *               prodNameList.add(prodName);
	 *           }
	 *       }
	 *   } finally {
	 *       if (rs != null) {
	 *           rs.close();
	 *       }
	 *       dbop.closeStatement();
	 *   }
	 *   
	 *   このクラスを使うと:
	 *   final List&lt;String&gt; prodNameList = new ArrayList&lt;String&gt;();
	 *   String prodName = dbop.executeQuery(sql, paramMap, new ResultSetWhileOp(){
	 *       public void whileRsNext(ResultSet rs) throws SQLException {
	 *           String prodName = rs.getString(1);
	 *           prodNameList.add(prodName);
	 *       }
	 *   });
	 *   rsのnullの判断とか、rs.next()の判断とか、
	 *   rs.close()とdbop.closecloseStatement()は自動的に処理されるので、
	 *   使うのは便利になる。
	 * </pre>
	 * 
	 * @param rs
	 *            SQL実行されて返されたResultSet
	 * @throws Exception
	 *             異常
	 */
	public void whileRsNext(ResultSet rs) throws Exception;
}
